package br.com.velp.sudecap.mb.usuario;

import br.com.velp.sudecap.comum.BaseController;
import br.com.velp.sudecap.comum.SpringConstants;
import br.com.velp.sudecap.enumerator.PaginaEnum;
import br.com.velp.sudecap.mb.contexto.ContextoBean;
import br.com.velp.sudecap.util.JsfUtil;
import br.com.velp.sudecap.util.MensagemUtil;
import br.com.velp.sudecap.ws.DireitoSistema;
import br.com.velp.sudecap.ws.UsuarioResultadoConsultaDTO;
import br.com.velp.sudecap.ws.WSLogin;
import br.com.velp.sudecap.ws.WSLogin_Service;
import java.util.List;
import javax.annotation.PostConstruct;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 * <sumario>
 * <objetivo>"Rastreabilidade"</objetivo>
 * <autor>EDUARDO SANTOS DE OLIVEIRA</autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 06.11.2012 </data_criacao>
 * <data_ultima_alteracao> 13.12.2013 </data_ultima_alteracao>
 * <requisito_afetado> RF001.01 - Autenticar Usuário </requisito_afetado>
 * <descricao> Managead Bean responsável por controlar o acesso as 
 *             funcionalidades do Sistema </descricao>
 * </sumario>
 */
@Controller("loginUsuario")
@Scope(SpringConstants.SCOPE_SESSION)
public class LoginUsuario extends BaseController {
    
    private static final long serialVersionUID = 1L;

    private String login;
    private String senha;
    private UsuarioResultadoConsultaDTO usuarioLogado;
    
    @PostConstruct
    public void postConstruct() {
	
	this.login = null;
	this.senha = null;
	
    }

    public String login() {
        
        WSLogin_Service loginService = new WSLogin_Service();
        WSLogin wsLogin = loginService.getWSLoginPort();
        
        UsuarioResultadoConsultaDTO usuario = wsLogin.recuperarUsuarioPorLoginSenha(this.login, this.senha);
	
	if (usuario == null) {
            
	    MensagemUtil.exibirMensagemErro("Usuário ou Senha Incorretos.");
	    return null;
            
	} if (!usuario.isAtivo()) {
          
	    MensagemUtil.exibirMensagemErro("Usuário Inativo. Favor Procurar o Administrador do Sistema.");
            return null;
            
        } else {
            
            this.usuarioLogado = usuario;
            
	    List<DireitoSistema> privilegios = wsLogin.recuperarPrivilegiosDoUsuario(usuario.getId(), "01");
	    JsfUtil.adicionarObjetoSessao("contextoBean", new ContextoBean(usuario, privilegios));
            
	    return PaginaEnum.PAGINA_PRINCIPAL.getValue();
            
        }
	
    }
        
    public String logout(){
	
	JsfUtil.removerObjetoSessao("contextoBean");
        JsfUtil.getSession().invalidate();
        
	return PaginaEnum.PAGINA_LOGIN.getValue();
	
    }
    
    public String paginaPrincipal() {
        
        return PaginaEnum.PAGINA_PRINCIPAL.getValue();
        
    }

    // <editor-fold desc="GETTERS AND SETTERS" defaultstate="collapsed">            
    public String getLogin() {
	return login;
    }

    public void setLogin(String login) {
	this.login = login;
    }

    public String getSenha() {
	return senha;
    }

    public void setSenha(String senha) {
	this.senha = senha;
    }

    public UsuarioResultadoConsultaDTO getUsuarioLogado() {
        return usuarioLogado;
    }

    public void setUsuarioLogado(UsuarioResultadoConsultaDTO usuarioLogado) {
        this.usuarioLogado = usuarioLogado;
    }
    // </editor-fold>        
    
}
